<?php

/**
 * @APP@
 *
 * @package Page
 */
require_once 'App.php';

/**
 * ユーザー作成
 *
 * サインアップフォームのデータでユーザーを作成します
 *
 * @package Page
 * @author  $Author:$
 * @version SVN: Release: $Id:$
 */
class Page_User_Create extends App_Page
{
    /**
     * ユーザー作成後画面
     *
     * ユーザーにメール送信の案内を出す画面です
     *
     * @return void
     *
     * @required domain
     */
    public function onClickCreated(array $args)
    {
        // 登録されたメールアドレスのドメインをセット
        $this->set('domain', $args['click']['domain']);
        $this->display('created.tpl');
        $this->end();
    }

    /**
     * インジェクト
     *
     * @return void
     */
    public function onInject()
    {
        parent::onInject();
        // 押されたボタンでに応じたインジェクターを用意
        if (isset($_POST['_freeze'])){
            //確認インジェクト
            $formMode = 'preview';
        } elseif (isset($_POST['_modify'])){
            //修正インジェクト
            $formMode = 'modify';
        } else {
            //初期インジェクト
            $formMode = 'default';
        }
        $this->injectArg('form_mode', $formMode);
    }

    /**
     * 初期化
     *
     * @required form_mode
     *
     * @return void
     */
    public function onInit(array $args)
    {
        $this->_form = BEAR::dependency('App_Form_User');
        $this->_form->build($args['form_mode']);
    }

    /**
     * 出力
     *
     * @return void
     */
    public function onOutput(){
        //確認...ボタン
        $this->_form->buildConfirmButton();
        // 確認画面
        $this->display();
    }

    /**
     * アクション
     *
     * プレビュー画面があります。
     *
     * @param array $submit サブミット値
     * @return void
     */
    public function onAction(array $submit)
    {
        if (isset(BEAR_Form::$submitValue['_action'])) {
            //送信ボタンがおされてアクション実行
            $this->_doAction($submit);
        } elseif (isset(BEAR_Form::$submitValue['_modify'])) {
            // 修正ボタンがおされて最初の画面を表示
            $this->_form->buildConfirmButton();
            $this->display();
        } else {
            // 確認...ボタンがおされて確認画面を表示
            $this->_form->buildSendButton();
            $this->display('create_preview.tpl');
        }
    }

    /**
     * submitアクション実行
     *
     * @param array $values
     */
    protected function _doAction(array $values)
    {
        $values['password'] = md5($values['password']);
        $params = array('uri' => 'User', 'values' => $values, 'options' => array('poe' => false));
        $result = $this->_resource->create($params)->request();
        $this->set('submit', $values);
        $this->_sendMail($submit);
        $emailArr = explode('@', $values['email']);
        $domain = $emailArr[1];
        $options = array('click' => 'created', 'val' => array('domain' => $domain));
        BEAR::dependency('BEAR_Page_Header')->redirect('.', $options);
    }

    public function onActionOriginal(array $submit)
    {
        // $submitにはボタン名は伝わらないので、サブミット値がそのまま入っているBEAR_Form::$submitValueで
        // 押されたボタンを判定
        if (isset(BEAR_Form::$submitValue['_action'])) {
            //アクション実行
            $submit['password'] = md5($submit['password']);
            $params = array('uri'=>'User', 'values'=>$submit, 'options'=>array('poe'=>true));
            $this->_resource->create($params);
            $this->set('submit', $submit);
            $this->_sendMail($submit);
            $emailArr = explode('@', $submit['email']);
            $domain = $emailArr[1];
            $options = array('click' => 'created', 'val'=>array('domain'=>$domain));
            $this->_header->redirect('.', $options);
        } elseif (isset(BEAR_Form::$submitValue['_modify'])) {
            // 修正画面
            BEAR::dependency('App_Form_User')->confirm();
        } else {
            // 確認画面
            BEAR::dependency('App_Form_User')->freeze();
        }
        //確認か修正画面
        $this->display();
    }

    /**
     * 確認メール送信
     *
     * @param array $submit
     * @return void
     */
    private function _sendMail(array $submit)
    {
        $headers['From'] = $this->_config['email_from'];
        $headers['To'] = "{$submit['user_id']} <{$submit['email']}>";
        $headers['Subject'] = $this->_config['email_subject'];
        $address = array($submit['email']);
        $mail = Mail::factory($this->_config['mail_adaptor']);
        $body = $this->fetch('mail/activate.tpl');
        $result = $mail->send($address, $headers, $body);
        if(PEAR::isError($result)) {
            //            throw new Page_User_Create_Mail_Exception('メール送信エラー', array('info'=>array('adaptor'=>$this->_config['mail_adptor'])));
            //            exit();
        }
    }
}

App_Main::run('Page_User_Create');